package ClassicDataStructuresAndAlgorithms.ClassicLinkedListAlgorithms;

public class Solution82 {
    public ListNode deleteDuplicates(ListNode head) {
        /*设置一个虚拟头节点*/
        ListNode dummy = new ListNode(-101);
        ListNode p1 = dummy;
        ListNode p2 = head;

        while(p2!=null){
            //检查是否有重复元素，使用p2来探查
            if (p2.next!=null && p2.val == p2.next.val){
                while(p2.next!=null && p2.next.val == p2.val){
                    //p2不断往后面探查，发现p2后一个node的值和p2相同，
                    //则快指针p2不断往后走，直到包含了当前所有重复元素
                    p2 = p2.next;
                }
                //上面的循环结束以后，p2指向重复元素中的最后一个元素，我们让p2再往后面退一个
                //方面让p1直接指向不重复元素
                p2 = p2.next;
                if(p2 == null){
                    p1.next = null;
                }
            }else{
                p1.next = p2;
                p1 = p1.next;
                p2 = p2.next;
            }
        }

        return dummy.next;
    }
}
